{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 第七周作业"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "问题描述：  \n",
    "运⾏课上给出的notebook的代码：  \n",
    "https://www.tinymind.com/ai100/notebooks/74  \n",
    "给出代码的运⾏log截图并提供⼼得体会⽂档描述对整个模型构建及训练过程的理解"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "#导入模块\n",
    "import warnings\n",
    "warnings.filterwarnings('ignore')\n",
    "\n",
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "##from tensorflow.examples.tutorials.mnist import input_data\n",
    "from tensorflow.contrib.learn.python.learn.datasets.mnist import read_data_sets\n",
    "from matplotlib import pyplot as plt\n",
    "%matplotlib inline\n",
    "tf.logging.set_verbosity(tf.logging.INFO)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Extracting ./train-images-idx3-ubyte.gz\n",
      "Extracting ./train-labels-idx1-ubyte.gz\n",
      "Extracting ./t10k-images-idx3-ubyte.gz\n",
      "Extracting ./t10k-labels-idx1-ubyte.gz\n",
      "(55000, 784)\n",
      "(55000,)\n",
      "(5000, 784)\n",
      "(5000,)\n",
      "(10000, 784)\n",
      "(10000,)\n"
     ]
    }
   ],
   "source": [
    "#读取所需数据mnist数据集\n",
    "mnist = read_data_sets(\"./\")\n",
    "\n",
    "print(mnist.train.images.shape)\n",
    "print(mnist.train.labels.shape)\n",
    "\n",
    "print(mnist.validation.images.shape)\n",
    "print(mnist.validation.labels.shape)\n",
    "\n",
    "print(mnist.test.images.shape)\n",
    "print(mnist.test.labels.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#设置图片显示的尺寸，和排列方式，以及标签。显示图片\n",
    "plt.figure(figsize=(8,8))\n",
    "\n",
    "for idx in range(16):\n",
    "    plt.subplot(4,4, idx+1)\n",
    "    plt.axis('off')\n",
    "    plt.title('[{}]'.format(mnist.train.labels[idx]))\n",
    "    plt.imshow(mnist.train.images[idx].reshape((28,28)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "#定义用于训练的网络\n",
    "x = tf.placeholder(\"float\", [None, 784])\n",
    "y = tf.placeholder(\"int64\", [None])\n",
    "learning_rate = tf.placeholder(\"float\")\n",
    "#定义初始化函数\n",
    "def initialize(shape, stddev=0.1):\n",
    "  return tf.truncated_normal(shape, stddev=0.1)\n",
    "\n",
    "L1_units_count = 100\n",
    "\n",
    "W_1 = tf.Variable(initialize([784, L1_units_count]))\n",
    "b_1 = tf.Variable(initialize([L1_units_count]))\n",
    "logits_1 = tf.matmul(x, W_1) + b_1\n",
    "output_1 = tf.nn.relu(logits_1)\n",
    "\n",
    "L2_units_count = 10 \n",
    "W_2 = tf.Variable(initialize([L1_units_count, L2_units_count]))\n",
    "b_2 = tf.Variable(initialize([L2_units_count]))\n",
    "logits_2 = tf.matmul(output_1, W_2) + b_2  \n",
    "\n",
    "logits = logits_2\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "#优化模型\n",
    "#定义交叉熵损失\n",
    "cross_entropy_loss = tf.reduce_mean(\n",
    "    tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=y))\n",
    "#梯度下降算法的优化器,定义学习率和交叉熵损失\n",
    "optimizer = tf.train.GradientDescentOptimizer(\n",
    "    learning_rate=learning_rate).minimize(cross_entropy_loss)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "#将输出的结果与正确结果进行对比，得到我们的网络输出结果的准确率。\n",
    "pred = tf.nn.softmax(logits)\n",
    "correct_pred = tf.equal(tf.argmax(pred, 1), y)\n",
    "accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "#批处理数据数量（一次性喂给神经网络多少数据）\n",
    "batch_size = 32\n",
    "##训练模型的迭代次数\n",
    "trainig_step = 1000\n",
    "#saver用于保存或恢复训练的模型\n",
    "saver = tf.train.Saver()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "after 100 training steps, the loss is 0.435821, the validation accuracy is 0.8912\n",
      "after 200 training steps, the loss is 0.472446, the validation accuracy is 0.8992\n",
      "after 300 training steps, the loss is 0.215721, the validation accuracy is 0.9228\n",
      "after 400 training steps, the loss is 0.414953, the validation accuracy is 0.929\n",
      "after 500 training steps, the loss is 0.215363, the validation accuracy is 0.9288\n",
      "after 600 training steps, the loss is 0.154155, the validation accuracy is 0.9438\n",
      "WARNING:tensorflow:From c:\\users\\administrator\\appdata\\local\\programs\\python\\python37\\lib\\site-packages\\tensorflow\\python\\training\\saver.py:966: remove_checkpoint (from tensorflow.python.training.checkpoint_management) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Use standard file APIs to delete files with this prefix.\n",
      "after 700 training steps, the loss is 0.472605, the validation accuracy is 0.9434\n",
      "after 800 training steps, the loss is 0.143812, the validation accuracy is 0.9492\n",
      "after 900 training steps, the loss is 0.0867495, the validation accuracy is 0.9516\n",
      "the training is finish!\n",
      "the test accuarcy is: 0.9509\n"
     ]
    }
   ],
   "source": [
    "#创建session，将数据填入网络中。\n",
    "with tf.Session() as sess:\n",
    "    sess.run(tf.global_variables_initializer())\n",
    "\n",
    "    #定义验证集与测试集\n",
    "    validate_data = {\n",
    "        x: mnist.validation.images,\n",
    "        y: mnist.validation.labels,\n",
    "    }\n",
    "    test_data = {x: mnist.test.images, y: mnist.test.labels}\n",
    "\n",
    "    for i in range(trainig_step):\n",
    "        xs, ys = mnist.train.next_batch(batch_size)\n",
    "        _, loss = sess.run(\n",
    "            [optimizer, cross_entropy_loss],\n",
    "            feed_dict={\n",
    "                x: xs,\n",
    "                y: ys,\n",
    "                learning_rate: 0.3\n",
    "            })\n",
    "\n",
    "        #每100次训练打印一次损失值与验证准确率\n",
    "        if i > 0 and i % 100 == 0:\n",
    "            validate_accuracy = sess.run(accuracy, feed_dict=validate_data)\n",
    "            print(\n",
    "                \"after %d training steps, the loss is %g, the validation accuracy is %g\"\n",
    "                % (i, loss, validate_accuracy))\n",
    "            saver.save(sess, './model.ckpt', global_step=i)\n",
    "\n",
    "    print(\"the training is finish!\")\n",
    "    #最终的测试准确率\n",
    "    acc = sess.run(accuracy, feed_dict=test_data)\n",
    "    print(\"the test accuarcy is:\", acc)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "INFO:tensorflow:Restoring parameters from ./model.ckpt-900\n",
      "0.9375\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#用训练好的模型做测试\n",
    "with tf.Session() as sess:\n",
    "    ckpt = tf.train.get_checkpoint_state('./')\n",
    "    if ckpt and ckpt.model_checkpoint_path:\n",
    "        saver.restore(sess, ckpt.model_checkpoint_path)\n",
    "        final_pred, acc = sess.run(\n",
    "            [pred, accuracy],\n",
    "            feed_dict={\n",
    "                x: mnist.test.images[:16],\n",
    "                y: mnist.test.labels[:16]\n",
    "            })\n",
    "        orders = np.argsort(final_pred)\n",
    "        plt.figure(figsize=(8, 8))\n",
    "        print(acc)\n",
    "        for idx in range(16):\n",
    "            order = orders[idx, :][-1]\n",
    "            prob = final_pred[idx, :][order]\n",
    "            plt.subplot(4, 4, idx + 1)\n",
    "            plt.axis('off')\n",
    "            plt.title('{}: [{}]-[{:.1f}%]'.format(mnist.test.labels[idx],\n",
    "                                                  order, prob * 100))\n",
    "            plt.imshow(mnist.test.images[idx].reshape((28, 28)))\n",
    "\n",
    "    else:\n",
    "        pass"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 总结："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 对模型结构的理解\n",
    "\n",
    "这是一个全连接神经网络。优化求解参数的过程采用的是梯度下降算法。\n",
    "输入层：784个输入数据加一个偏置项，输入层的每个神经元是一张像素为28x28的图片一维展开的结果，取值为0或1。\n",
    "隐层:100个神经元加一个偏置项，激活函数为Relu\n",
    "输出层:10个神经元，每组数据代表一个经过one_hot编码的label的取值\n"
   ]
  },
  {
   "attachments": {
    "%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C%E5%8F%82%E6%95%B0%E6%9B%B4%E6%96%B0.png": {
     "image/png": "iVBORw0KGgoAAAANSUhEUgAAAOYAAABsCAYAAAB+Qc4FAAAVnElEQVR4nO2d30/Tab7Hnz/ge8MlFyQkDUkvTIwxXmjICVxAZkPSEg0h/khTNjMpZseAswHUAJqxYIaanYXEqXtymjNLMIub08xk2M1hHLuOmMjs0F1rpDF1FI+O1rEjalMJSMv3dS76LbS1lPKj7bf4vJJeSGl5vs/X9/f5PJ/n80MgkUh0hyj2ACQSybtIYUokOkQKUyLRIVKYkm3OAiHvJXptR+m0DzDQY8PUdALX5FOiWT8XIzJzjT/bbdQaKtjdcAiLpYkG03Eu3nxKlAWCV/s4cvEOsTyMWgpTso2JEZ4a4renrxCMqss/VcM/4KhvpPfqzxnFqUbu8lXvfgxVh+hz3yKU/NnIPcZ6P6bnQi8mZS89E7N5GbkUpmT7snSP4UYDBvNFfHNq0hsxZsc7KDd245lNXu9UosEr9NZWUmW5wM3gQubvnfsRx94yRNnvGZ/Nx3ophSnZzoSv02Mso6pllAeLaspb6uNRmsVO2sZ/WfnZyxv01Vag1A5w82U2wb1m0l6NMA8zo2b5tU0ghSl5Pwm6sQiFXYO++B5Rfcr48b0IUUvvRIjsepsn4DpItTM/+0uQwpRsa1SiIS+j9g8xNX+C3TGAvbODvrGfiPgG2SUEBoeXKCpz3vPsFQLl4CiP1lwF5/A7j2KffJW3kUthSrYpCwSvf06zsSHNyTPH/RE7vd0HUYQBi/sxqE8Ya92BEDtoHXuyxmpZGKQwJduQGBHfBUxKJWaXn8W0d+P7S4EQdTi8YZgdp61MIJRW3MHshyiFQgpTsv1Y9OMyVyLKOzJ7TYNuLEIgKk4z8UYlppm1otqJP1+bxnUihSnZZqjMTfazQwjKOz2EM7y/4HWwUygYe64TBqJeBwYhEBY3wTW/P8bLH77m20erHKVsEVKYkm3GHH6nGSF20+n5NcP7b/A79yNEA4O+CABLARf1uQpTfYT74wEmwktbPfAUpDA3hEo0dJsr1wJE9OApkCQRweuoQYjDDM9kWNXmfsSxtxxj11VmE/fu7S0G95UhdjrwLmS7oTFeTvyRE+6ZNcL5No8U5ob4hfG2nQhRg8MbKfZgJCksEfacpDyjMCNMO5tR9vTiCSVLa5Hg2HGqxD66PM9X8crGiEyPcKL/u5TwvnwhhbkRwh46ywVi3xC+t3LJ1B3zfoat1ZiGvCsWjfqagPsUtcaPcE2/fld86jMm+g9gqGph0HM/xRJSI/fxfNHJ0fPXCiJKkMLcACoLk31Uikoah++R352GZGOoRENTjHQ1srvmABbLIRr21GCxX8YbyuK0UcPM/MNFd9MeFEMNTRYLRxpqqWs9j9v3PO/mazJSmOsmjNdRl9cAZolECnO9xO7grK5g3+At3hZ7LJJtixTmOon5nVQrRxh+kN9zLMn7TWkLM+ZjsKYbT9YUna1knoCribK2cfKTHiuRxCltYapPGGuto338WYECj2NEZv6Nb7UEWolki3hXmNGf8Tg66fz0GKb6s1xN+k+ohr6n/2An7kcLgMp8YARrlSFjoHBhWCI8cYadB0e4v7gOaZbUNebCAkHPIO2d3bSZDqRmU6jPmOj/kN+5H8Y9yPN+hq27UMwuAuuZs4KwQPDqH2jvbKdprw3X9CzhwN9wHP+EnoEBztoaMfddLdiRRTFJE+Yc94dPcmYihPpmgp6KpERSogTdrSjLB7cqiw9GaalSkkKZFphxn6Bhdzli1yC+QliYahDPCRPNF305RuFs9ho3wdI9hhsrEUKs72U8kyUETGXx/iV+d+Z7XqqzTPTsTZl7NejGqlRgHv4pblUs3mO0ZRdC2JYzKZZm3Bxv2I0iPmDQ92azV7lxwtc5/fFXPFUf47YYUP6jEVvSgX48K6Qmr3mQeiFVmG9vMWj5bwJLiUDg5HjDX/F07k6LwF9gZviwlmxKyu9lDiDOD2rkNi5rLSb733kQWeNpsCXXqCci+AY7cQXmYe4m9h1K0twnomDMOP1zy59QZ4YxGxx4ly9I+73yk3jyHAO6OkuEPZ/yofsRauwOzuoyFNOfmJ5PKoQ1M4w5kUO5zUkVZvQ59x6GUXnBRE81Ykc/k4kiRtpNr+iZYOWZGiXo/n1K3RQWpnDsNNA8+nBd+76lB8M0KutcSTK9DI04JrO4ZjZ9jUWwCrKywLN7j4iocbPemLKivGLSXrOc3rRM0E1LigNLO5ttHuXxOm7a+u9ZtqAMlfmZf3P716gmwKRVHogX0Po9ZWkPmU3/f8nTa7Nk/oawh87yspSzupjfSXVa8SJ4xWRfb0pyaTxSP3Xy8k70Z672mtlr+wLPTDi3B8ImrrEYVsHaaKt9cpigtvKkepFV5ib/wMfuRyvztHQXV31lXmvY5E5CgE1xK2AZzUxPf8hsUzIIMxFypmV3A7DI49EWhGhh9HGSC2TuJn0fXU6qkaJNqjZ5auQOo31nONvexrmbv+bHc6q+wjd0mLreK+twCmzmGtmwVZCfPWZiTJPYKxV2OqZIuLLie7LKtHG+YrLvJKOPksIjZsdpK9NqpKqvmR510Hv2E1rP3eBlwTWgCTA90yPjQ2b7kkGYUYJuW4pzYDmVJmVfEmPW4+DkeDDppscnVbG6eRq+zaXzf2X66U0ctZVJDpatRGUx4KKx/nOmwuv59s1cY5GsgrUIurGk7b/iCcCpGTDqrIfTJ8cJLV+QypuJ01Qorbif/sr0pQtcmp7hR4cJpRim+sIUjp3KO9ZIZvN2+5JxxXw7fZF6ZT9Of3ynpYZ/wFFXkVKqQQ3/k6FT/5NarzN2B2d1OcaPTnH29F+YjsTiUf3XbhBYyymzIV4w0WPaQAGlTVxjMayCXHh7G2d9FXXOO/FjHXWWKYcZRexaOedVZ5ka+ozLD5IfKFpisbGFnrPnGJl+jUqMSOAG1wIZsjDyTPyhV4U12dReZX+5ncm8x1Rf4798ClOtle6Bfrra7HwTCODpO0it5SQDAz20d/3XO5Wq40+1HTRYDtFgaqXPPZ3fROKoF0fVBgsobfAaC28V5EqMiP+vdJl+g6X7HANdxzn5zTT/5/kMc62V7oFz9LR3a303klB/YthcSVXDYY407MfW9xX+vDxEc7uG0NgxlHdCHjXzNtlRtxrRX/COfIrN1ondcY4e2wGaOr9kssSCQrYw8kd7qpWfxBOOEQ24MGnnYmrIx4172yShuOBWQZ6ZHaetTDsyit7FZdIeMOpzvDfuM7/2N2wpauQh//KnpVhp+8s1nW3qLFPn2zmdUq4yRnjqc+rrUgNJ9M4WCjNeNl6xugmqaHueFkYfv8J/8cy2CfouuFWQVzQn2HLZxse4LbtoHp3hrd/FMZ3km8bnPN28fZf48Y0Rs/MWKQav+ozx9t2p5UR0zhYK8yljtjqOjj2OT170Id+0N2PtPEHvyO0S/s+bzHazCmKExtowHv0m/jBlnkffnMBk/YSuXs0aKDqrHZ+kkzjH3UXL6L208EnN415CObSlHcRecN4Pq0BfrHJ8si4SXvgihxyuAynMdfE+WAV6Y4HgxGUurdloNv67Ie9l7Nb9NHecxeE4S2e7g7EHz/ENflBSxdOkMCXbg+gTrjsOY6xNc/IsBhg51UP34aqkc2v9Z+NIYUpKH/UVvqEmFOUQrkD6OWciokssm8ObzcYpBFKYkhInHv1lVgTl7eMZvK6J/aXQkhM2m41TmCQGKUxJiaNl0KzaEkHLnBHV9Ey8YGuycfKfxCCFKSlttOADsVou6eIdnHXlGYpzbyIbZ6NJDOtAClNS2kS9OAwCYR5m5t3y6lqn6AytDzaRjVOIJAYpTEmJo618mYQ5fxunqYo9J75LyqbR2HA2TmGSGKQwJSWOVjDN2MyQ79WyMNTIXdxdv8Fo/TJzBNOGs3EKk8QghSnZBiwQ8l6iq2EfNU1HsBxpYM9eK/ZRL6FVk+c3mI1ToCQGKUyJZB0UKolBClMiyZnCJTFIYUokOVO4JAYpTIkkZwqXxCCFKZHoEClMiUSHSGFKJDpEClMi0SFSmBKJDpHClEh0iBSmRKJDpDAlJUI8HrbXdpRO+wADPTZMTSdwrVmkK0Zk5hp/ttuoNVSwu+EQFksTDabjWhzsAsGrfRy5qIdOZytIYUpKgBjhqSF+ezq1o5sa/gFHfWNqMa0k1Mhdvurdj6HqEH3uWykB7WrkHmO9H9NzoReTonU60xFSmBL9s3SP4UYDBvNFfCm9S2LMjndQbuzGk1LIWSUavEJvbSVVlgsZ+s9ozP2IY2+ZLgtBS2FK9E/4Oj3GMqpaRtM6ryWqDqQ2G1Zf3qCvtgKldoCbL7MJLh77mrn6QXGRwpSUNkE3FqGsJCmrTxk/vhchaumdCK1RUWCegOugTjpppyKFKSkBVKIhL6P2DzE1f4LdMYC9s4O+sZ+I+AbZJQQGh5foco0fgXJwNLULeEbm8DuPJlXJ0w9SmBKds0Dw+uc0GxvSnDxz3B+x09t9ECVRu0d9wljrDoTYsYFmxvpCClOiY2JEfBcwKZWYXf60Dl6J/aVAiDoc3rDW61MglA02M9YRUpgS/bLox2WuRJR3ZPaaBt1YhFgu0BzTzFpR7cSvt03jOpHClOgUlbnJfnYIsUrFc5UFr4OdQsHYc50wifKTAmFxE1zz+2O8/OFrvn2kz9aJUpgSnTKH32nO0vrgDX7nfoRoYNAXr7UTL8ScozDVR7g/HmAiU/V2HSCFuWlUoqHbXLkWkP0xt5QIXkcNQhxmeCbDqjb3I4695ant29/eYnBfWQ5NbmO8nPgjJ9wzOfTcLA5SmJvmF8bbdpZUU9TSINF5K5MwI0w7m1H29OIJJUtrkeDYcaoytURYJkZkeoQT/d+lhPfpDSnMzRL20FkuMjStkWyaeT/D1mpMQ94Va0R9TcB9ilrjR7imX78rPvUZE/0HMFS1MOi5n2LFqJH7eL7o5Oj5a7oWJRRAmEszf+GQQYk3DlWOMRYqHXfZ2mNXWZjso1JU0jh8j+LtVhaYGf0o7vgQAsU2RqhoY9lKVKKhKUa6GtldcwCL5RANe2qw2C/jDWVx2qhhZv7hortpD4qhhiaLhSMNtdS1nsfte65b8zWZAq2Yj3FbDIh6FwF97rWzkG3sWu9FvQRBB91YRDn1rrtFfEhItoLCCHNhEntloqNviZFt7LE7OKsr2Dd4i7eZPltQEqu3/lKYJOunIMKMu7GN2MaeFuLPbSnZxh7zO6lWjmxpBe6NM0/A1VRy2wVJZgogzChBdyuKaIr3vS8GMR+DNd14sqYAZSLb2ONCSO0+XETUR7itVSW6XZCkUwBhao1F0/vaFxL1CWOtdSt9D3Mm29hjRGb+jW+1JNxCo3mHS3K7IHmH/Asz5mNwl4KoOY7D3kGnvZ9uazNHh7e210N2lghPnGHnwRHuL67jj+pi7LkRjxMtp6ajH3t7F/aBk1jNxxnOdKRQcFSiwe/ob++go6keq+s24fBdxhydtPecw3G2lQbzZ3j08pDTAXkXZryfoECpPctVbeLV2XHayxOHwLNMDrZQY1Dy6+ZXg3hOmGi+6MtZVGuPfZ0s3WO4sTJ+/LKel/HMGqFjC8wMH0aICmp7E3Vx0stuFGieM/KCidM9uJ/OEXTbEMo+TLbzy3OK+pDRZgM77DeZy/Y17xF5FqbWT1DUpCajRr04DEnByUt3cdUb8u7mVyO3cVlrMdn/zoM1u//mOHZdoEUf7ehnMqkmTjyoOynWtEDz/A5hD10fugmqWvyr0oxzOilKSv2JYXNFjsHn7wd5Fma8X70oP4kn+YkfGsOmJAUbh8awKVpO3RosPRimUVnnipPpZWjEMZnNbZPL2JcITw5xsKaquN7QNxP0VKQ/LGKExo6tJBEvjz2Hed7Ayq40DvNgNbXPP+SH2yHUhADTa+zMjtNWVpZS4mPT93eDL72Q35HE7uCsLltp9AmAypuJ01SIxI3Q/l2IQ/roz1ztNbPX9gWemXB2UzSnscPyMUURvaExv5NqUYXV/SjpmrQHizDj9M+tjL2YwRCz47SVpQdAJOZUnr8mk19hhsawKek3IoJvsAGhHMIVmGM5vSfflcrUV/iGDlPXeyW3OMmcxg7xZqY72OmYYk3XRV72mImVMe1IR8u0UMwuAosqBZvnVUkIMH3F1sall+gpnZBfYYY9dJYnmVKAOnuVLmM5e3q/56WKtr8w5LlSmcpiwEVj/edMhXP8K7mMHTQzMrV8YmFJZGHYksppxJj1dGNMrhRXkHnOhha+mL41WM28fc/JrzDVIOPt1dQ578TrtUR/5mpvA0brl0wnnC+z47SV5duMecFEj2l9BZpyGTsJM3KVnMECoYb+l/aqAzj9b1gpdrwPqyvpWKcg85yFpbu46svTtgZk3F9K8u78UYkGr+GwHqHN3k+3tYmWwe+TTMkC7XuiXhxV6y3QtNbYYfmYoug1ZhYIXv8j1uY27fyylcHrT5KyKHSwvwyNYVPSs3AS5m1NbiUko7/gHfkUm60Tu+McPbYDNHV+yWTK+ef2yLQpshsqad8zd5ev/3ZXB8Hg6yF+TKH/aBsdzLMa5uG/7qb0D1keV7p5m/Hzs0ydb+d0SgnLGOGpz6mvWzlnXqbEM22KLMx4SpXBMcWc7z/pSPEqlgBF31/mik7nWdtfvmPeZiB+TGbE7LyVGoSgPmO8fXdqiZFtkGlTZGFGCV3vo950lI7jf8rdMaMTVvaXLwh8/S1+3VYw0Ok8Zzw+yUQ8pNIodtEyei+tvuwij0db0ry6pZ9po58T1ZIjGg8vMzjwzt1iqOMrnupVl7pkteOT9aLdB/EBgz5tQ7ENMm2kMDeBGrrG6fr9HOs4wdDUrD7Mw5JBJRq8wcilyRzr7ywQ8l7Gbt1Pc8dZHI6zdLY7GHvwHN/gB6nF0LZBpo0UpkT/RJ9w3XEYY22ak2cxwMipHroPVyGSznH1nWmTG1KYEn2jvsI31ISSEm2VQNtfCpFUSzaXTBv9I4Up0THxiC2zIihvH0/yuiZI7C+TzdYcMm3CkwwerMGg43I3UpgSHfOKSXtNljYJWpifqKZn4kX8Rzlm2sRrORWx3M0aSGFK9IuW4bNqAMLiHZx15SnFtnPLtNGEumYrheIhhSnRL1pSeuYA90T36ORqErlm2sSFqptCahmQwpToGK0YWiZhzt/Gaapiz4nvCC2/l2OmTewOzmoD5uGfdOullcKU6BiV+cAIVmMzQ75XyyJSI3dxd/3mnUwfyC3TJl7LKWHW6hMpTInOWSDkvURXwz5qmo5gOdLAnr1W7KPetID4ld/Pnmmj1XIqZjnVHJDClLxn6H9/CVKYkveN5f1lgLnAt/zNr8+gPSlMyftF0I1F1ODwBvEN9eN+urj2Z4qAFKbk/UJ9xvXTBzAd+4TjQ/8krNNtphSmRKJDpDAlEh0ihSmR6JD/B0oTNTW1mOc5AAAAAElFTkSuQmCC"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 对模型训练过程（梯度如何计算，参数如何更新）的理解：  \n",
    "\n",
    "\n",
    "梯度如何计算：  \n",
    "先把输出y与真值用softmax映射到概率上，然后再用交叉熵计算它们之间的损失，得到一个交叉熵损失函数，梯度就是交叉熵损失函数在各个参数方向上求导得出的矢量，梯度计算主要的目标是寻找能够使交叉熵损失取得最小值的权重w和偏置b。  \n",
    "\n",
    "\n",
    "参数如何更新：  ![%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C%E5%8F%82%E6%95%B0%E6%9B%B4%E6%96%B0.png](attachment:%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C%E5%8F%82%E6%95%B0%E6%9B%B4%E6%96%B0.png)\n",
    "\n",
    "首先设置初始的w,b参数，然后设置学习率η,再计算梯度向量，这个时候会得到w1,b1,然后循环迭代，把w1,b1代入式子右边，又得到更新的参数值w2,b2,如此循环往复的更新，直到最后找到一个最低点能使交叉熵损失函数的值最小，这个时候就得到了全局最优解，参数停止更新\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "####  对计算图的理解：\n",
    "   计算图是Tensorflow一个基本概念，Tensorflow中的所有计算都会被转化为计算图上的节点（节点表示某种运算，一般都是二元运算 ），而节点之间的边则描述计算之间的依赖关系，计算图的框架由Tensorflow构成。我们用 Python 操作 Tensorflow 时，第一件事是组装计算图，之后我们的第二个任务就是与它进行交互（使用 Tensorflow 的“会话”）。  \n",
    "   计算图不在变量内部，它处在全局命名空间内。计算图的好处：Tensorflow仅通过必需的节点自动计算。如果计算图非常大并且有许多不必要的节点，它就能节约大量运行时间和计算资源。因为在需要的时候才会创建Session使用计算资源，所以在这种方式下我们就能非常便捷的构建大型，多用途的计算图。\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 解释这里为什么效果比较差：\n",
    "tf.train.GradientDescentOptimizer()这里所设置的学习率是一个初始恒定的学习率，当目标函数为凸函数时，理论上保证收敛到全局最小值，如果目标函数非凸则收敛到局部最小值，它不是一个自适应学习率。不同的学习率对不同的函数收敛效果是不一样的，每个函数的每次迭代都应该寻找一个最适合的学习率才可以使得迭代次数变少并保证函数收敛，不会震荡。恒定学习率得到的结果可能是一个局部最优解，另外，采用梯度下降法训练的神经网络中，使用滑动平均模型可以提高神经网络在测试模型中的表现。如果要让测试效果变好，还需要我们手工调试学习率。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
